package org.example.leetCode;

import java.util.Arrays;

/**
 * 1005. K 次取反后最大化的数组和
 * 给你一个整数数组 nums 和一个整数 k ，按以下方法修改该数组：
 * 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
 * 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
 * 以这种方式修改数组后，返回数组 可能的最大和 。
 */
public class Code1005 {
    public int largestSumAfterKNegations(int[] nums, int k) {
        int sum = 0;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0 && k > 0) {
                nums[i] = -nums[i];
                k--;
            }
            sum = sum + nums[i];
        }
        if (k % 2 == 1) {
            Arrays.sort(nums);
            sum = sum - 2 * nums[0];
        }
        return sum;
    }
    public static void main(String[] args) {
        Code1005 solution = new Code1005();

        // 测试用例1
        int[] nums1 = {4, 2, 3};
        int k1 = 1;
        System.out.println("输入: nums = [4,2,3], k = 1");
        System.out.println("输出: " + solution.largestSumAfterKNegations(nums1, k1));
        System.out.println();

        // 测试用例2
        int[] nums2 = {3, -1, 0, 2};
        int k2 = 3;
        System.out.println("输入: nums = [3,-1,0,2], k = 3");
        System.out.println("输出: " + solution.largestSumAfterKNegations(nums2, k2));
        System.out.println();

        // 测试用例3
        int[] nums3 = {2, -3, -1, 5, -4};
        int k3 = 2;
        System.out.println("输入: nums = [2,-3,-1,5,-4], k = 2");
        System.out.println("输出: " + solution.largestSumAfterKNegations(nums3, k3));
    }
}
